查看原文
其他

软件应用丨Tushare获取数据

向前走别回头 数据Seminar 2021-06-02

版权声明:本文为CSDN博主「向前走别回头的原创文章,遵循 CC 4.0 BY-SA 版权协议,特此附上原文出处链接及本声明

原文链接:

https://www.cnblogs.com/DreamRJF/p/8660630.html

https://blog.csdn.net/weixin_39778570/article/details/81150376




获取股票交易数据


以前不知道怎么从网上直接获取数据,都是从交易软件上下载数据,也只有个别的软件才能下载,例如通达信可以导出数据,现在学到了一种新的方法,利用tushare可以获取金融数据,这里就简单的分享一下股票数据的获取方法。
Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Python pandas包在金融量化分析中体现出的优势,Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。当然,如果您习惯了用Excel或者关系型数据库做分析,您也可以通过Tushare的数据存储功能,将数据全部保存到本地后进行分析。应一些用户的请求,从0.2.5版本开始,Tushare同时兼容Python 2.x和Python 3.x,对部分代码进行了重构,并优化了一些算法,确保数据获取的高效和稳定。
不管你是量化投资分析师,还是正在学习Python进行数据分析的学习者,这种方法获取的数据都可以适用。

一、获取前的准备

  1. 安装Python,这个不再赘述,Python官网下载安装适合自己计算机的版本。

  2. 安装pandas,我是直接安装的Anaconda,包含有pandas,很实用,建议安装Anaconda,下载地址:https://www.anaconda.com/download/  ,选择适合的版本安装。

  3. Tushare的下载安装,下载地址:https://pypi.python.org/pypi/tushare   ,下载完之后解压即可,无需安装。


二、获取数据

1、获取历史行情数据 get_hist_data()
获取个股历史交易数据(包括均线数据),可以通过参数设置获取日k线、周k线、月k线,以及5分钟、15分钟、30分钟和60分钟k线数据。本接口只能获取近3年的日线数据,适合搭配均线数据进行选股和分析。
参数说明:
  • code:股票代码,即6位数字代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板)

  • start:开始日期,格式YYYY-MM-DD

  • end:结束日期,格式YYYY-MM-DD

  • ktype:数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D

  • retry_count:当网络异常后重试次数,默认为3

  • pause:重试时停顿秒数,默认为0

返回值说明:

  • date:日期

  • open:开盘价

  • high:最高价

  • close:收盘价

  • low:最低价

  • volume:成交量

  • price_change:价格变动

  • p_change:涨跌幅

  • ma5:5日均价

  • ma10:10日均价

  • ma20:20日均价

  • v_ma5:5日均量

  • v_ma10:10日均量

  • v_ma20:20日均量

  • turnover:换手率[注:指数无此项]

使用方法:
import tushare as tsdata=ts.get_hist_data('300274')print(data)
左右滑动查看更多
需要注意的是路径要在tushare文件下,否则会报错。
执行结果:
View Code
左右滑动查看更多

获取某一时间段的历史数据

import tushare as tsdata=ts.get_hist_data('300274',start='2017-01-01',end='2018-03-27')print(data)
左右滑动查看更多

执行结果:

View Code
左右滑动查看更多

另外一个获取历史数据的函数get_h_data()。

import tushare as tsdata=ts.get_h_data('300274')print(data)
左右滑动查看更多
执行结果:
View Code
左右滑动查看更多

在不指定开始时间和结束时间时,该函数默认返回最近一年的日线数据,返回的数据与get_hist_data不同的是,该函数只返回开盘价(open)、最高价(high)、收盘价(close)、最低价(low)、成交量(volume)、成交金额(amount)六列 ,同样加上时间段也可以获取相应数据。

第三个获取历史数据的函数get_k_data()。

import tushare as tsdata=ts.get_k_data('300274')print(data)
左右滑动查看更多
执行结果:
View Code

左右滑动查看更多

与前两个函数相比,这个函数获取数据的速度很明显要快很多,而且可以返回每一只股票从上市开始到当前交易日的所有日线数据,这个有点是前两个函数都不具备的,更重要的是,如果批量3000多只股票的数据,前两个都不如get_k_data()稳定。
其他:
ts.get_hist_data('600848', ktype='W') #获取周k线数据ts.get_hist_data('600848', ktype='M') #获取月k线数据ts.get_hist_data('600848', ktype='5') #获取5分钟k线数据ts.get_hist_data('600848', ktype='15') #获取15分钟k线数据ts.get_hist_data('600848', ktype='30') #获取30分钟k线数据ts.get_hist_data('600848', ktype='60') #获取60分钟k线数据ts.get_hist_data('sh')#获取上证指数k线数据,其它参数与个股一致,下同ts.get_hist_data('sz')#获取深圳成指k线数据ts.get_hist_data('hs300')#获取沪深300指数k线数据ts.get_hist_data('sz50')#获取上证50指数k线数据ts.get_hist_data('zxb')#获取中小板指数k线数据ts.get_hist_data('cyb')#获取创业板指数k线数据
左右滑动查看更多

2、获取实时行情数据get_today_all()

返回值说明:

  • code:代码

  • name:名称

  • changepercent:涨跌幅

  • trade:现价

  • open:开盘价

  • high:最高价

  • low:最低价

  • settlement:昨日收盘价

  • volume:成交量

  • turnoverratio:换手率

  • amount:成交量

  • per:市盈率

  • pb:市净率

  • mktcap:总市值

  • nmc:流通市值

import tushare as tsts.get_today_all()
左右滑动查看更多
执行结果:
View Code

左右滑动查看更多

一次性获取当前交易所有股票的行情数据(如果是节假日,即为上一交易日)

3、获取历史分笔数据之:get_tick_data()

获取个股以往交易历史的分笔数据明细,通过分析分笔数据,可以大致判断资金的进出情况。在使用过程中,对于获取股票某一阶段的历史分笔数据,需要通过加入交易日参数并append到一个DataFrame或者直接append到本地同一个文件里。历史分笔接口只能获取当前交易日之前的数据,当日分笔历史数据请调用get_today_ticks()接口或者在当日18点后通过本接口获取。

参数说明:

  • code:股票代码,即6位数字代码

  • date:日期,格式YYYY-MM-DD

  • retry_count : int, 默认3,如遇网络等问题重复执行的次数

  • pause : int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题

使用方法:
import tushare as tsdf=ts.get_tick_data('300274',date='2018-03-27')df.head(10) #距离执行时间最近的十笔交易
左右滑动查看更多
执行结果:
time price change volume amount type0 15:00:03 18.46 -- 2373 4380761 卖盘1 14:57:03 18.46 -0.01 188 347048 卖盘2 14:57:00 18.47 -0.01 42 77574 卖盘3 14:56:57 18.48 -- 644 1190112 买盘4 14:56:54 18.48 0.01 80 147840 买盘5 14:56:51 18.47 0.01 9 16623 中性盘6 14:56:48 18.46 -0.02 38 70148 卖盘7 14:56:45 18.48 0.01 25 46200 买盘8 14:56:42 18.47 -- 87 160689 买盘9 14:56:36 18.47 -- 82 151454 买盘
左右滑动查看更多
4、获取当日历史分笔数据:get_today_ticks()

获取当前交易日(交易进行中使用)已经产生的分笔明细数据。

参数说明:

  • code:股票代码,即6位数字代码

  • retry_count : int, 默认3,如遇网络等问题重复执行的次数

  • pause : int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题

返回值说明:
  • time:时间

  • price:当前价格

  • pchange:涨跌幅

  • change:价格变动

  • volume:成交手

  • amount:成交金额(元)

  • type:买卖类型【买盘、卖盘、中性盘】

使用方法:

import tushare as tsdf = ts.get_today_ticks('300274') #当日的历史分笔数据df.head(10) #距离执行时间最近的10笔
左右滑动查看更多

执行结果:

[Getting data:]###########################################Out[6]: time price pchange change volume amount type0 13:32:15 18.68 +1.19 -0.01 1 1868 买盘1 13:32:12 18.69 +1.25 0.00 8 14952 买盘2 13:32:06 18.69 +1.25 0.01 1 1869 买盘3 13:32:03 18.68 +1.19 0.00 19 35492 卖盘4 13:31:51 18.68 +1.19 0.00 8 14944 买盘5 13:31:48 18.68 +1.19 0.01 14 26152 买盘6 13:31:45 18.67 +1.14 -0.01 30 56010 卖盘7 13:31:42 18.68 +1.19 0.01 8 14944 买盘8 13:31:36 18.67 +1.14 0.00 14 26138 卖盘9 13:31:33 18.67 +1.14 -0.01 10 18670 卖盘
左右滑动查看更多
5、获取实时分笔数据之:get_realtime_quotes()
获取实时分笔数据,可以实时取得股票当前报价和成交信息,其中一种场景是,写一个python定时程序来调用本接口(可两三秒执行一次,性能与行情软件基本一致),然后通过DataFrame的矩阵计算实现交易监控,可实时监测交易量和价格的变化。
参数说明:
  • symbols:6位数字股票代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板) 可输入的类型:str、list、set或者pandas的Series对象

返回值说明:
0:name,股票名字1:open,今日开盘价2:pre_close,昨日收盘价3:price,当前价格4:high,今日最高价5:low,今日最低价6:bid,竞买价,即“买一”报价7:ask,竞卖价,即“卖一”报价8:volume,成交量 maybe you need do volume/1009:amount,成交金额(元 CNY)10:b1_v,委买一(笔数 bid volume)11:b1_p,委买一(价格 bid price)12:b2_v,“买二”13:b2_p,“买二”14:b3_v,“买三”15:b3_p,“买三”16:b4_v,“买四”17:b4_p,“买四”18:b5_v,“买五”19:b5_p,“买五”20:a1_v,委卖一(笔数 ask volume)21:a1_p,委卖一(价格 ask price)...30:date,日期;31:time,时间;
左右滑动查看更多

使用方法:

import tushare as tsdf = ts.get_realtime_quotes('300274') #单个股票实时行情df[['code','name','price','bid','ask','volume','amount','time']] #需要显示的属性
左右滑动查看更多
执行结果:
code name price bid ask volume amount time0  300274  阳光电源  18.780  18.750  18.770  17003279  318581216.230  13:16:06
左右滑动查看更多
多只股票的实时分笔数据(最好不要超过30):
import tushare as tsdf = ts.get_realtime_quotes(['600460','000762','000725'])df[['code','name','price','bid','ask','volume','amount','time']]
左右滑动查看更多

获取实时指数:

ts.get_realtime_quotes('sh') #上证指数
ts.get_realtime_quotes(['sh','sz','hs300','sz50','zxb','cyb']) #上证指数 深圳成指 沪深300指数 上证50 中小板 创业板
ts.get_realtime_quotes(['sh','600848']) #或者混搭

左右滑动查看更多

大盘指数行情列表:
获取大盘指数实时行情列表,以表格的形式展示大盘指数实时行情。
返回值说明:
  • code:指数代码

  • name:指数名称

  • change:涨跌幅

  • open:开盘点位

  • preclose:昨日收盘点位

  • close:收盘点位

  • high:最高点位

  • low:最低点位

  • volume:成交量(手)

  • amount:成交金额(亿元)

使用方法:
import tushare as tsdf = ts.get_index()print(df)
左右滑动查看更多

执行结果:

View Code

左右滑动查看更多

6、获取大单交易数据
获取大单交易数据,默认为大于等于400手,数据来源于新浪财经。
参数说明:
  • code:股票代码,即6位数字代码

  • date:日期,格式YYYY-MM-DD

  • vol:手数,默认为400手,输入数值型参数

  • retry_count : int, 默认3,如遇网络等问题重复执行的次数

  • pause : int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题

返回值说明:
  • code:代码

  • name:名称

  • time:时间

  • price:当前价格

  • volume:成交手

  • preprice :上一笔价格

  • type:买卖类型【买盘、卖盘、中性盘】

使用方法:
import tushare as tsdf = ts.get_sina_dd('300274', date='2018-03-28') #默认400手#df = ts.get_sina_dd('300274', date='2018-03-28', vol=500) #指定大于等于500手的数据print(df)
左右滑动查看更多

执行结果:

View Code

左右滑动查看更多

7、数据的存储
数据存储模块主要是引导用户将数据保存在本地磁盘或数据库服务器上,便于后期的量化分析和回测使用,在以文件格式保存在电脑磁盘的方式上,调用的是pandas本身自带的方法,此处会罗列常用的参数和说明。
保存为CSV格式文件
pandas的DataFrame和Series对象提供了直接保存csv文件格式的方法,通过参数设定,轻松将数据内容保存在本地磁盘。
常用参数说明:
  • path_or_buf: csv文件存放路径或者StringIO对象

  • sep : 文件内容分隔符,默认为,逗号

  • na_rep: 在遇到NaN值时保存为某字符,默认为’‘空字符

  • float_format: float类型的格式

  • columns: 需要保存的列,默认为None

  • header: 是否保存columns名,默认为True

  • index: 是否保存index,默认为True

  • mode : 创建新文件还是追加到现有文件,默认为新建

  • encoding: 文件编码格式

  • date_format: 日期格式

注:在设定path时,如果目录不存在,程序会提示IOError,请先确保目录已经存在于磁盘中。
使用方法:
import tushare as tsdf = ts.get_hist_data('300274')#直接保存df.to_csv('C:/Users/07010018/Desktop/tushare-1.1.6/exportdata/300274.csv')#选择保存#df.to_csv('C:/Users/07010018/Desktop/tushare-1.1.6/exportdata/300274.csv',columns=['open','high','low','close'])

左右滑动查看更多

追加数据的方式:

某些时候,可能需要将一些同类数据保存在一个大文件中,这时候就需要将数据追加在同一个文件里,简单举例如下:

import tushare as tsimport os
filename = 'c:/day/bigfile.csv'for code in ['000875', '600848', '000981']: df = ts.get_hist_data(code) if os.path.exists(filename): df.to_csv(filename, mode='a', header=None) else: df.to_csv(filename)
左右滑动查看更多

【注:如果是不考虑header,直接df.to_csv(filename, mode=’a’)即可,否则,每次循环都会把columns名称也append进去】

保存为Excel格式文件

pandas将数据保存为MicroSoft Excel文件格式。

常用参数说明
  • excel_writer: 文件路径或者ExcelWriter对象

  • sheet_name:sheet名称,默认为Sheet1

  • sep : 文件内容分隔符,默认为,逗号

  • na_rep: 在遇到NaN值时保存为某字符,默认为’‘空字符

  • float_format: float类型的格式

  • columns: 需要保存的列,默认为None

  • header: 是否保存columns名,默认为True

  • index: 是否保存index,默认为True

  • encoding: 文件编码格式

  • startrow: 在数据的头部留出startrow行空行

  • startcol :在数据的左边留出startcol列空列

使用方法:
import tushare as tsdf = ts.get_hist_data('300274')#直接保存df.to_excel('C:/Users/07010018/Desktop/tushare-1.1.6/exportdata/300274.xlsx')
#设定数据位置(从第3行,第6列开始插入数据)#df.to_excel('C:/Users/07010018/Desktop/tushare-1.1.6/exportdata/300274.xlsx', startrow=2,startcol=5)

左右滑动查看更多

保存为MySQL数据库
pandas提供了将数据便捷存入关系型数据库的方法,在新版的pandas中,主要是已sqlalchemy方式与数据建立连接,支持MySQL、Postgresql、Oracle、MS SQLServer、SQLite等主流数据库。本例以MySQL数据库为代表,展示将获取到的股票数据存入数据库的方法,其他类型数据库请参考sqlalchemy官网文档的create_engine部分。
常用参数说明:
  • name:表名,pandas会自动创建表结构

  • con:数据库连接,最好是用sqlalchemy创建engine的方式来替代con

  • flavor:数据库类型 {‘sqlite’, ‘mysql’}, 默认‘sqlite’,如果是engine此项可忽略

  • schema:指定数据库的schema,默认即可

  • if_exists:如果表名已存在的处理方式 {‘fail’, ‘replace’, ‘append’},默认‘fail’

  • index:将pandas的Index作为一列存入数据库,默认是True

  • index_label:Index的列名

  • chunksize:分批存入数据库,默认是None,即一次性全部写人数据库

  • dtype:设定columns在数据库里的数据类型,默认是None

使用方法:
from sqlalchemy import create_engineimport tushare as ts
df = ts.get_tick_data('300274', date='2018-03-27')engine = create_engine('mysql://user:passwd@127.0.0.1/db_name?charset=utf8')
#存入数据库df.to_sql('tick_data',engine)
#追加数据到现有表#df.to_sql('tick_data',engine,if_exists='append')
左右滑动查看更多

另外,数据也可以保存为HDF5格式,JSON格式,存入NoSQL数据库,这里就不在一一赘述,就简单介绍几种常用的。

所有内容,仅作参考,可能有不足或错误之处,欢迎留言批评指正




补充


看电影票房:

>>> df = ts.realtime_boxoffice()>>> print dfBoxOffice Irank MovieName boxPer movieDay sumBoxOffice \0 884.23 1 功夫熊猫3 41.10 10 67092.331 280.00 2 澳门风云3 13.02 0 280.002 206.94 3 美人鱼 9.62 0 207.473 165.42 4 过年好 7.69 7 4556.424 97.99 5 鼠来宝4:萌在囧途 4.56 13 5906.525 93.22 6 西游记之孙悟空三打白骨精 4.33 0 131.896 82.24 7 蒸发太平洋 3.82 10 3490.017 79.73 8 星球大战:原力觉醒 3.71 30 82365.098 78.27 9 熊出没之熊心归来 3.64 23 27437.329 38.20 10 最后的巫师猎人 1.78 24 17908.9010 144.99 11 其它 1.00 0 0.00
左右滑动查看更多

看新闻:

>>> ts.get_latest_news()classify title time \0 证券 2016春晚明星股东大盘点:赵薇胡歌孙楠领衔 02-07 09:511 美股 中国1月末外汇储备减少994亿美元 02-07 09:382 美股 研究:中国宝宝太依赖奶粉 将付深远代价 02-07 09:303 证券 【泽平宏观】货政配合供给侧改革和稳汇率 02-07 08:534 美股 英国首相卡梅伦祝贺中国春节 02-07 08:355 国内财经 央行发布报告称稳健货币政策取得较好效果 02-07 05:596 国内财经 人民日报:中国钢铁不会成为“世界包袱” 02-07 05:547 美股 伊朗欲弃用美元结算石油贸易 02-07 05:398 美股 日美韩拟针对与朝交易企业采取新金融制裁 02-07 05:129 美股 美报告:人民币将在未来10年削弱美元主导地位 02-07 02:45

左右滑动查看更多

看一些宏观数据,如居民消费指数
>>> ts.get_cpi()month cpi0 2015.12 101.641 2015.11 101.492 2015.10 101.273 2015.9 101.604 2015.8 101.965 2015.7 101.65
左右滑动查看更多
看股票基本面:
>>> ts.get_stock_basics()name industry area pe outstanding totals totalAssets \code000001 平安银行 银行 深圳 6.02 1180405.50 1430867.63 2.599060e+08000002 万 科A 全国地产 深圳 29.51 970832.75 1103913.25 5.707935e+07000004 国农科技 生物制药 深圳 776.48 8387.54 8397.66 3.586395e+04000005 世纪星源 区域地产 深圳 0.00 91374.29 105853.68 1.336589e+05

左右滑动查看更多

获取一些分类信息,如上证50成份股:

>>> ts.get_sz50s()code name0 600000 浦发银行1 600010 包钢股份2 600015 华夏银行3 600016 民生银行4 600018 上港集团5 600028 中国石化6 600030 中信证券
左右滑动查看更多

获取股票信息,如日线图:

>>> ts.get_hist_data('600848')open high close low volume price_change p_change \date2016-02-05 15.02 15.90 15.30 15.02 37989.99 0.15 0.992016-02-04 14.52 15.25 15.15 14.52 40090.40 0.67 4.632016-02-03 14.50 14.53 14.47 14.25 22184.43 -0.07 -0.482016-02-02 14.15 14.71 14.55 14.05 42175.52 0.46 3.272016-02-01 13.99 14.28 14.10 13.90 27130.60 0.12 0.862016-01-29 13.59 14.21 13.97 13.30 38279.97 0.40 2.952016-01-28  13.96  14.21  13.56  13.40  27015.35         -0.45     -3.21
左右滑动查看更多
另外,还有数据保存和使用通联数据的功能,就不一一赘叙了。




·END·


点击阅读原文,进入新型农业经营主体大数据库



点击搜索你感兴趣的内容吧

往期推荐

软件应用丨Seaborn简单画图:(二)

专题报告丨城西科创大走廊 明星企业巡礼

终于等到你丨企研大数据资源预览系统上线啦!

《管理世界》大讲堂第二期课程:如何利用微观数据资源做学术研究

软件应用丨Seaborn简单画图:(一)

数据资源丨Q1免费资源合辑,你想要的没准在这里(文末有福利)

软件应用丨Matplotlib简单画图:(二)

号外丨2020年度农民专业合作社“兴农”会员名单大公布





数据Seminar




这里是大数据、分析技术与学术研究的三叉路口





出处:CSDN作者:向前走别回头推荐:青酱排版编辑:青酱 





    欢迎扫描👇二维码添加关注    


点击阅读原文,获得更多精彩内容!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存